package com.neouton.crm.cm.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.neouton.common.util.PageUtil;
import com.neouton.crm.cm.entity.SalesCostMigrateVO;
import com.neouton.crm.entity.SysUserEntity;
import com.neouton.crm.op.entity.SalesOpportunityVO;
import com.neouton.crm.pm.entity.SalesProjectManageVO;
import com.neouton.crm.sales.entity.SalesAuditVO;

import java.util.List;

public interface CostMigrateService {
    PageUtil<SalesCostMigrateVO> queryCostInfo(IPage<SalesCostMigrateVO> page, SalesCostMigrateVO costMigrateVO, List<SysUserEntity> userList, String token);
    PageUtil<SalesCostMigrateVO> queryCostInfoAudit(IPage<SalesCostMigrateVO> page, SalesCostMigrateVO costMigrateVO, List<SysUserEntity> userList, String token);
    SalesCostMigrateVO queryCostInfoById(Integer costMigrateId);
    List<SalesCostMigrateVO> queryCostById(SalesCostMigrateVO costMigrateVO);
    List<SalesCostMigrateVO> queryCostByPM(Integer projectManageId);
    List<SalesProjectManageVO> queryProjects(SalesProjectManageVO projectManageVO, String token);
    void commitCost(SalesCostMigrateVO costMigrateVO,String token);

    void addCost(SalesCostMigrateVO costMigrateVO);
    void updateCost(SalesCostMigrateVO costMigrateVO);
    void costMigrateAudit(SalesAuditVO auditVO, String token);

    /**
     * 费用记录审批通过
     * @param costMigrateVO
     * @return
     */
    Boolean approveCostInfo(SalesCostMigrateVO costMigrateVO, String token);

    /**
     * 费用记录审批驳回
     * @param costMigrateVO
     * @return
     */
    Boolean rejectionCostInfo(SalesCostMigrateVO costMigrateVO,String token);

    /**
     * 费用迁移审批通过
     * @param auditVO
     * @return
     */
    Boolean approveCostMigrate(SalesAuditVO auditVO, String token);

    /**
     * 费用迁移审批驳回
     * @param auditVO
     * @return
     */
    Boolean rejectionCostMigrate(SalesAuditVO auditVO,String token);

    /**
     * 根据工作流ID获取费用记录审批信息
     * @param workId
     * @return
     */
    SalesCostMigrateVO queryCostApprovalByWorkId(Integer workId);
    /**
     * 根据工作流ID获取费用迁移审批信息
     * @param workId
     * @return
     */
    SalesAuditVO queryCostAuditByWorkId(Integer workId);

    SalesAuditVO queryCostAuditByOpId(Integer opId);

    Boolean verifyCost(Integer opportunityId,String token);

    int deleteCostById(Integer costMigrateId);

    List<SalesCostMigrateVO> queryOpFailTest(Integer opportunityId);

    int queryOpTest(Integer opId);

    SalesCostMigrateVO queryHistoryCostRecordByApprovalId(Integer workId);

    SalesAuditVO queryHistoryCostMigrateByApprovalId(Integer workId);

    List<SalesOpportunityVO> selectAllOpInfo(SalesOpportunityVO opportunityVO);

    Boolean testOpById(Integer opId);

    PageUtil<SalesAuditVO> queryCostAudit(IPage<SalesAuditVO> page, SalesAuditVO auditVO, List<SysUserEntity> userList, String token);

    PageUtil<SalesAuditVO> queryCostAuditInfo(IPage<SalesAuditVO> page, SalesAuditVO auditVO, List<SysUserEntity> userList, String token);

}
